/*
--------------------- 
作者：qr_ljj 
来源：CSDN 
原文：https://blog.csdn.net/qr_ljj/article/details/80671068 
版权声明：本文为博主原创文章，转载请附上博文链接！
*/
module rx_control_module//数据装载模块
(
    clk3, rst3,
	 H2L_Sig, RX_Pin_In2, BPS_CLK, RX_En_Sig1,
    Count_Sig, RX_Data, RX_Done_Sig
	 
);
input clk3;
input rst3;			//复位信号 RSTn,当RSTn=0时，系统复位
input H2L_Sig;		//帧开始信号H2L_Sig,当H2L_Sig=1，表示一帧信号开始
input RX_En_Sig1;	//串口接收使能信号 RX_En_Sig,当RX_En_Sig=1，系统正常工作。反正不接收数据
input RX_Pin_In2;	//串口数据输入信号： RX_Pin_In
input BPS_CLK;	//位中心定位信号：BPS_CLK
	 
output Count_Sig;
output[7:0] RX_Data;
output RX_Done_Sig;

reg[3:0] i;
reg[7:0] rData;
reg isCount;
reg isDone;
	
always @ ( posedge clk3 or negedge rst3 )
	if( !rst3 )
	begin 
		i <= 4'd0;
		rData <= 8'd0;
		isCount <= 1'b0;
		isDone <= 1'b0;	 
	end
	else if( RX_En_Sig1 )
	case ( i )				
		4'd0 :
				if( H2L_Sig )
				begin
					i <= i + 1'b1;
					isCount <= 1'b1;
				end
					 
		4'd1 : 
				if( BPS_CLK )
				begin
					i <= i + 1'b1;
				end
					 
		4'd2, 4'd3, 4'd4, 4'd5, 4'd6, 4'd7, 4'd8, 4'd9 :
				if( BPS_CLK )
				begin
					i <= i + 1'b1;
					rData[ i - 2 ] <= RX_Pin_In2;
				end
					 
		4'd10 :
				if( BPS_CLK )
				begin
					i <= i + 1'b1;
				end
					 
		4'd11 :
				if( BPS_CLK )
				begin
					i <= i + 1'b1;
				end
					 
		4'd12 :
				begin
					i <= i + 1'b1;
					isDone <= 1'b1;
					isCount <= 1'b0;
				end
					 
		4'd13 :
				begin
					i <= 4'd0;
					isDone <= 1'b0;
				end
				 
	endcase
				
assign Count_Sig = isCount;
assign RX_Data = rData;
assign RX_Done_Sig = isDone;
 
endmodule
